import taichi as ti

ti.init(arch=ti.cuda)

#太极禁止在kernel下的函数内嵌套其他kernel函数
def foo(): 
    print("foo")
    bar()
#kernel会将最外层的for循环会被并行调用 但内部的循环时串行
@ti.kernel
def bar(): 
    print("bar：")
    for i in range(3):          #并行调用
        for j in range(3):      #串行调用
            print(i,j)
    #由于kernel内最外分支为并行 所以最外部不能使用break语句
    
    # 并行计算可能出现数据多线占用情况  a=a+1语句中出现
    a+=1
    ti.atomic_add(a,1)    # 并行计算 原子保护
    a = a+1
# 

foo()
bar()

N=10
x = ti.Vector.field(2,dtype=ti.i32,shape=(N,N))
#自定场可以被kernel内的for识别维度
@ti.kernel
def fee():
    for i,j in x:
        x[i,j] = ti.Vector([i,j])

fee()
#for i in ti.field()  这个语句必须出现在kernel外部 否则 只能用数代替被遍历的目标




